/*! \file BinaryStandardFormatLogger.hpp
    \brief Une classe qui ecrit les appels d'allocation dans un format binaire simple.
*/


#ifndef __BSF_LOGGER_HPP__
#define __BSF_LOGGER_HPP__

#include "ILogger.hpp"
#include <unistd.h>
#include <cassert>




/**
 *\class BinaryStandardFormatLogger
 *\brief Ce loggeur fait partie du noyau d'instrumentation de l'interface malloc de la libc;
 * Si il foire tout foire, donc son ecriture doit s'accompagner d'une validation incrémentale
 * Il est nécéssaire d'avoire un format de validation, j'ai choisit le xml.
 */

class BinaryStandardFormatLogger :virtual public ILogger
{
  
private:
  int out;
  char path[50];
  void openFile();
  
  
public:


  void initLogger();
  void finitLogger();
  
  /**
   *\brief 
   *\
   */
  void startMalloc(void* addr,size_t size,unsigned int index,int tmm);
  
  /**
   *\brief
   */
  void startCalloc(void* addr,
		   size_t nmemb,
		   size_t size,
		   int compteur_calloc,
		   unsigned int memory_allocation);
  
  /**
   *\brief 
   */
  void startRealloc(void*  v,void*  ret,size_t n,int id,size_t tm);
  
  /**
   *\brief
   *@see readAndDump()
   */
  void startFree(void* addr,unsigned nbfree);
  
  /**
   *\brief
   *
   */
  void finalizeLog(alloc_stats &st);
  
  /**
   *\brief 
   */
  void endElement(const char *type);
  
  /**
   *
   */
  BinaryStandardFormatLogger();
  
  
  /**
   *\brief ne fait rien
   */
  ~BinaryStandardFormatLogger();
};

#endif
